home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume15 / mush6.3kit / part03 < prev    next >
Encoding:
Internet Message Format  |  1988-07-06  |  58.6 KB

  1. Subject:  v15i087:  Mush (mail user's shell) upgrade kit, version 6.3, Part03/04
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rsalz@uunet.UU.NET
  5.  
  6. Submitted-by: dheller@cory.Berkeley.EDU (Dan Heller)
  7. Posting-number: Volume 15, Issue 87
  8. Archive-name: mush6.3kit/part03
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of shell archive."
  17. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  18. if test -f 'Diffs.6.3.b' -a "${1}" != "-c" ; then 
  19.   echo shar: Will not clobber existing file \"'Diffs.6.3.b'\"
  20. else
  21. echo shar: Extracting \"'Diffs.6.3.b'\" \(57115 characters\)
  22. sed "s/^X//" >'Diffs.6.3.b' <<'END_OF_FILE'
  23. X!  * message list if we hit the end.  otherwise, stop at the end of the list.
  24. X   */
  25. X  next_msg()
  26. X  {
  27. X--- 23,31 ----
  28. X  }
  29. X  
  30. X  /*
  31. X!  * loop thru all msgs starting with current_msg and find next undeleted and
  32. X!  * unsaved message.  If the variable "wrap" is set, wrap to the beginning of
  33. X!  * the message list if we hit the end.  otherwise, stop at the end of the list.
  34. X   */
  35. X  next_msg()
  36. X  {
  37. X***************
  38. X*** 40,46 ****
  39. X          return current_msg = msg_cnt - 1;
  40. X          else
  41. X          n = -1; /* increments to 0 in  loop  */
  42. X!     else if (isoff(msg[n].m_flags, DELETE))
  43. X          return current_msg = n;
  44. X      return current_msg = 0;
  45. X  }
  46. X--- 40,47 ----
  47. X          return current_msg = msg_cnt - 1;
  48. X          else
  49. X          n = -1; /* increments to 0 in  loop  */
  50. X!     else if (isoff(msg[n].m_flags, DELETE) &&
  51. X!          isoff(msg[n].m_flags, SAVED))
  52. X          return current_msg = n;
  53. X      return current_msg = 0;
  54. X  }
  55. X***************
  56. X*** 286,291 ****
  57. X--- 287,293 ----
  58. X              case 'n' : turnon(newflag, UNREAD), turnoff(newflag, OLD);
  59. X              when 'd' : turnon(newflag, DELETE);
  60. X              when 'p' : turnon(newflag, PRESERVE);
  61. X+             when 's' : turnon(newflag, SAVED);
  62. X              when 'u' : turnon(newflag, UNREAD); /* fall thru! */
  63. X              case 'o' : turnon(newflag, OLD);
  64. X              when 'r' :
  65. X***************
  66. X*** 313,318 ****
  67. X--- 315,322 ----
  68. X          wprint(" PRESERVE");
  69. X          if (ison(msg[i].m_flags, REPLIED))
  70. X          wprint(" REPLIED");
  71. X+         if (ison(msg[i].m_flags, SAVED))
  72. X+         wprint(" SAVED");
  73. X          if (ison(msg[i].m_flags, UPDATE_STATUS))
  74. X          wprint(" UPDATE_STATUS");
  75. X          wprint("\n");
  76. X***************
  77. X*** 342,347 ****
  78. X--- 346,352 ----
  79. X  {
  80. X      static FILE *pp;
  81. X      static int cnt;
  82. X+     static u_long save_echo_flag;
  83. X  
  84. X  #ifdef SUNTOOL
  85. X      if (istool) {
  86. X***************
  87. X*** 352,360 ****
  88. X  #endif /* SUNTOOL */
  89. X      if (start_pager) {
  90. X      turnon(glob_flags, IGN_SIGS);
  91. X!     if (!buf)
  92. X          pp = stdout;
  93. X!     else {
  94. X          echo_on();
  95. X          if (!(pp = popen(buf, "w")))
  96. X          error(buf);
  97. X--- 357,371 ----
  98. X  #endif /* SUNTOOL */
  99. X      if (start_pager) {
  100. X      turnon(glob_flags, IGN_SIGS);
  101. X!     if (!buf) {
  102. X!         /* internal pager */
  103. X!         save_echo_flag = ison(glob_flags, ECHO_FLAG);
  104. X          pp = stdout;
  105. X!         if (save_echo_flag) {
  106. X!         turnoff(glob_flags, ECHO_FLAG);
  107. X!         echo_off();
  108. X!         }
  109. X!     } else {
  110. X          echo_on();
  111. X          if (!(pp = popen(buf, "w")))
  112. X          error(buf);
  113. X***************
  114. X*** 364,370 ****
  115. X      if (pp && pp != stdout)
  116. X          pclose(pp);
  117. X      pp = NULL_FILE;
  118. X!     echo_off();
  119. X      turnoff(glob_flags, IGN_SIGS);
  120. X      } else if (pp != stdout)
  121. X      return fputs(buf, pp); /* returns EOF if user exited pager */
  122. X--- 375,385 ----
  123. X      if (pp && pp != stdout)
  124. X          pclose(pp);
  125. X      pp = NULL_FILE;
  126. X!     if (save_echo_flag) {
  127. X!         echo_on();
  128. X!         turnon(glob_flags, ECHO_FLAG);
  129. X!     } else
  130. X!         echo_off();
  131. X      turnoff(glob_flags, IGN_SIGS);
  132. X      } else if (pp != stdout)
  133. X      return fputs(buf, pp); /* returns EOF if user exited pager */
  134. X*** OLD/msgs.c    Sat May 21 10:27:30 1988
  135. X--- msgs.c    Tue Jul  5 22:53:26 1988
  136. X***************
  137. X*** 1,23 ****
  138. X  /* @(#)msgs.c    (c) copyright 10/18/86 (Dan Heller) */
  139. X  
  140. X! #include "mush.h"
  141. X! #ifdef SYSV
  142. X! #ifndef USG
  143. X! #include <sys/locking.h>
  144. X! #else /* USG */
  145. X  #include <unistd.h>
  146. X  #endif /* USG */
  147. X! #endif /* SYSV */
  148. X  
  149. X! lock_file(filename, fd)
  150. X  char *filename;
  151. X  {
  152. X  #ifdef SYSV
  153. X  #ifndef USG
  154. X!     (void) locking(fd, LK_LOCK, 0); /* xenix */
  155. X  #else
  156. X      /* if unable to lock, tell them */
  157. X!     if (Access(filename, W_OK) || lockf(fd, F_TLOCK, 0)) /* system-v */
  158. X      return -1;
  159. X  #endif /* USG */
  160. X  #else
  161. X--- 1,63 ----
  162. X  /* @(#)msgs.c    (c) copyright 10/18/86 (Dan Heller) */
  163. X  
  164. X! #ifdef USG
  165. X  #include <unistd.h>
  166. X  #endif /* USG */
  167. X! #include "mush.h"
  168. X! #if defined(SYSV) && !defined(USG)
  169. X! #include <sys/locking.h>
  170. X! #endif /* SYSV && !USG */
  171. X  
  172. X! extern int sgid;
  173. X! 
  174. X! #ifdef DOT_LOCK
  175. X! dot_lock(filename)
  176. X  char *filename;
  177. X  {
  178. X+     char buf[MAXPATHLEN];
  179. X+     int lockfd, cnt = 0;
  180. X+     SIGRET (*oldint)(), (*oldquit)();
  181. X+ 
  182. X+     setgid(sgid);
  183. X+     (void) sprintf(buf, "%s.lock", filename);
  184. X+     on_intr();
  185. X+     while ((lockfd = open(buf, O_CREAT|O_WRONLY|O_EXCL, 0600)) == -1) {
  186. X+     if (errno != EEXIST) {
  187. X+         error("unable to lock %s", filename);
  188. X+         break;
  189. X+     }
  190. X+     if (cnt++ == 0)
  191. X+         print("%s already locked, waiting", filename);
  192. X+     else
  193. X+         print_more(".");
  194. X+     sleep(1);
  195. X+     if (ison(glob_flags, WAS_INTR)) {
  196. X+         print_more("\nAborted.\n");
  197. X+         break;
  198. X+     }
  199. X+     }
  200. X+     off_intr();
  201. X+     if (lockfd != -1) {
  202. X+     if (cnt)
  203. X+         print("done.\n");
  204. X+     (void) close(lockfd);
  205. X+     }
  206. X+     setgid(getgid());
  207. X+     return lockfd == -1? -1 : 0;
  208. X+ }
  209. X+ #endif /* DOT_LOCK */
  210. X+ 
  211. X+ lock_file(filename, fp)
  212. X+ char *filename;
  213. X+ FILE *fp;
  214. X+ {
  215. X+     int fd = fileno(fp);
  216. X  #ifdef SYSV
  217. X  #ifndef USG
  218. X!     (void) locking(fd, LK_LOCK, 0); /* old xenix (sys III) */
  219. X  #else
  220. X      /* if unable to lock, tell them */
  221. X!     if (Access(filename, W_OK) || lockf(fd, F_LOCK, 0L)) /* system-v */
  222. X      return -1;
  223. X  #endif /* USG */
  224. X  #else
  225. X***************
  226. X*** 31,39 ****
  227. X      return 0;
  228. X  }
  229. X  
  230. X! close_lock(fp)
  231. X  FILE *fp;
  232. X  {
  233. X  #ifdef SYSV
  234. X  #ifndef USG
  235. X      locking(fileno(fp), LK_UNLCK, 0);
  236. X--- 71,87 ----
  237. X      return 0;
  238. X  }
  239. X  
  240. X! void
  241. X! close_lock(filename, fp)
  242. X! char *filename;
  243. X  FILE *fp;
  244. X  {
  245. X+ #ifdef DOT_LOCK
  246. X+     char buf[MAXPATHLEN];
  247. X+     setgid(sgid);
  248. X+     (void) unlink(sprintf(buf, "%s.lock", filename));
  249. X+     setgid(getgid());
  250. X+ #endif /* DOT_LOCK */
  251. X  #ifdef SYSV
  252. X  #ifndef USG
  253. X      locking(fileno(fp), LK_UNLCK, 0);
  254. X***************
  255. X*** 65,77 ****
  256. X      return;
  257. X      }
  258. X      set_isread(n);
  259. X!     if (ison(flg, TOP)) {
  260. X      turnon(flg, NO_HEADER);
  261. X      print("Top of "), turnon(glob_flags, CONT_PRNT);
  262. X      }
  263. X  
  264. X      if (!istool && isoff(flg, NO_PAGE) &&
  265. X!         crt < msg[n].m_lines && isoff(flg, TOP)) {
  266. X      char buf[32], *pager = do_set(set_options, "pager");
  267. X      if (!pager)
  268. X          pager = DEF_PAGER;
  269. X--- 113,125 ----
  270. X      return;
  271. X      }
  272. X      set_isread(n);
  273. X!     if (ison(flg, M_TOP)) {
  274. X      turnon(flg, NO_HEADER);
  275. X      print("Top of "), turnon(glob_flags, CONT_PRNT);
  276. X      }
  277. X  
  278. X      if (!istool && isoff(flg, NO_PAGE) &&
  279. X!         crt < msg[n].m_lines && isoff(flg, M_TOP)) {
  280. X      char buf[32], *pager = do_set(set_options, "pager");
  281. X      if (!pager)
  282. X          pager = DEF_PAGER;
  283. X***************
  284. X*** 105,111 ****
  285. X      char       line[BUFSIZ], *show_hdrs = NULL;
  286. X  
  287. X      still_more = 0;
  288. X!     if (ison(flags, TOP)) {
  289. X      register char *p = do_set(set_options, "toplines");
  290. X      top = (p)? atoi(p) : crt;
  291. X      }
  292. X--- 153,159 ----
  293. X      char       line[BUFSIZ], *show_hdrs = NULL;
  294. X  
  295. X      still_more = 0;
  296. X!     if (ison(flags, M_TOP)) {
  297. X      register char *p = do_set(set_options, "toplines");
  298. X      top = (p)? atoi(p) : crt;
  299. X      }
  300. X***************
  301. X*** 184,189 ****
  302. X--- 232,239 ----
  303. X          if (isoff(msg[n].m_flags, UNREAD) &&
  304. X              isoff(msg[n].m_flags, PRESERVE))
  305. X              *p++ = 'R';
  306. X+         if (ison(msg[n].m_flags, SAVED))
  307. X+             *p++ = 'S';
  308. X          if (ison(msg[n].m_flags, REPLIED))
  309. X              *p++ = 'r';
  310. X          *p++ = '\n', *p = 0;
  311. X***************
  312. X*** 222,228 ****
  313. X          }
  314. X          }
  315. X      }
  316. X!     if (!on_hdr && ison(flags, TOP) && !--top)
  317. X          break;
  318. X      if (isoff(flags, NO_HEADER)) {
  319. X          /* note that function returns the number of lines */
  320. X--- 272,278 ----
  321. X          }
  322. X          }
  323. X      }
  324. X!     if (!on_hdr && ison(flags, M_TOP) && !--top)
  325. X          break;
  326. X      if (isoff(flags, NO_HEADER)) {
  327. X          /* note that function returns the number of lines */
  328. X***************
  329. X*** 261,268 ****
  330. X  }
  331. X  
  332. X  /* get mail from whatever the mailfile points to. open a tempfile for
  333. X!  * appending, then close it and reopen it for read-only.  some systems
  334. X!  * have flakey read/write access.
  335. X   */
  336. X  void
  337. X  getmail()
  338. X--- 311,317 ----
  339. X  }
  340. X  
  341. X  /* get mail from whatever the mailfile points to. open a tempfile for
  342. X!  * appending, then close it and reopen it for read-only.
  343. X   */
  344. X  void
  345. X  getmail()
  346. X***************
  347. X*** 272,286 ****
  348. X      long     ftell(), bytes;
  349. X      char    line[BUFSIZ];
  350. X  
  351. X! #ifdef SYSV
  352. X!     /* for SVID systems to lock, the file must be open for read/write */
  353. X!     if (isoff(glob_flags, READ_ONLY))
  354. X!     mail_fp = fopen(mailfile, "r+");
  355. X!     else
  356. X! #endif /* SYSV */
  357. X!     mail_fp = fopen(mailfile, "r");
  358. X! 
  359. X!     if (!mail_fp) {
  360. X      error("Unable to open %s", mailfile);
  361. X      return;
  362. X      }
  363. X--- 321,327 ----
  364. X      long     ftell(), bytes;
  365. X      char    line[BUFSIZ];
  366. X  
  367. X!     if (!(mail_fp = fopen(mailfile, "r"))) {
  368. X      error("Unable to open %s", mailfile);
  369. X      return;
  370. X      }
  371. X***************
  372. X*** 305,313 ****
  373. X      } else if (msg_cnt)
  374. X      (void) fseek(tmpf, msg[msg_cnt-1].m_offset+msg[msg_cnt-1].m_size,L_SET);
  375. X  
  376. X-     if (isoff(glob_flags, READ_ONLY) && lock_file(mailfile, fileno(mail_fp)))
  377. X-     error("WARNING: unable to lock %s", mailfile);
  378. X- 
  379. X      (void) fseek(mail_fp, ftell(tmpf), L_SET);
  380. X  
  381. X  #ifdef MSG_SEPARATOR
  382. X--- 346,351 ----
  383. X***************
  384. X*** 345,351 ****
  385. X          if (isoff(glob_flags, READ_ONLY)) {
  386. X          fputs(line, tmpf);
  387. X          if (errno == ENOSPC)
  388. X!             fs_error();
  389. X          }
  390. X          /* we've read the "From " line, now read the rest of
  391. X           * the message headers till we get to a blank line.
  392. X--- 383,389 ----
  393. X          if (isoff(glob_flags, READ_ONLY)) {
  394. X          fputs(line, tmpf);
  395. X          if (errno == ENOSPC)
  396. X!             fs_error(mailfile, mail_fp);
  397. X          }
  398. X          /* we've read the "From " line, now read the rest of
  399. X           * the message headers till we get to a blank line.
  400. X***************
  401. X*** 358,363 ****
  402. X--- 396,402 ----
  403. X              switch(*p) {
  404. X                  when 'R': turnoff(msg[msg_cnt].m_flags, UNREAD);
  405. X                  when 'P': turnon(msg[msg_cnt].m_flags, UNREAD);
  406. X+                 when 'S': turnon(msg[msg_cnt].m_flags, SAVED);
  407. X                  when 'r': turnon(msg[msg_cnt].m_flags, REPLIED);
  408. X                  otherwise :
  409. X                  if (ison(glob_flags, WARNING))
  410. X***************
  411. X*** 368,374 ****
  412. X          if (isoff(glob_flags, READ_ONLY)) {
  413. X              fputs(line, tmpf);
  414. X              if (errno == ENOSPC)
  415. X!             fs_error();
  416. X          }
  417. X          }
  418. X          msg_cnt++, get_status = 1;
  419. X--- 407,413 ----
  420. X          if (isoff(glob_flags, READ_ONLY)) {
  421. X              fputs(line, tmpf);
  422. X              if (errno == ENOSPC)
  423. X!             fs_error(mailfile, mail_fp);
  424. X          }
  425. X          }
  426. X          msg_cnt++, get_status = 1;
  427. X***************
  428. X*** 377,383 ****
  429. X      if (isoff(glob_flags, READ_ONLY)) {
  430. X          fputs(line, tmpf);
  431. X          if (errno == ENOSPC)
  432. X!         fs_error();
  433. X      } else
  434. X          (void) fseek(tmpf, ftell(mail_fp), L_SET);
  435. X      }
  436. X--- 416,422 ----
  437. X      if (isoff(glob_flags, READ_ONLY)) {
  438. X          fputs(line, tmpf);
  439. X          if (errno == ENOSPC)
  440. X!         fs_error(mailfile, mail_fp);
  441. X      } else
  442. X          (void) fseek(tmpf, ftell(mail_fp), L_SET);
  443. X      }
  444. X***************
  445. X*** 387,409 ****
  446. X      msg[msg_cnt-1].m_lines = lines;
  447. X      }
  448. X  
  449. X-     close_lock(mail_fp);
  450. X- 
  451. X-     /* I've had problems with sys-v opening a file for read/write. I'd
  452. X-      * try fgets after a seek to an arbitrary place and get NULL. "w+"
  453. X-      * could be broken (XENIX), so play it safe anyway.
  454. X-      */
  455. X      if (isoff(glob_flags, READ_ONLY)) {
  456. X      fclose(tmpf);
  457. X      if (!(tmpf = fopen(tempfile, "r")))
  458. X          error("unable to open %s for reading", tempfile);
  459. X      }
  460. X  }
  461. X  
  462. X! fs_error()
  463. X  {
  464. X      error("WARNING: unable to write to \"%s\"", tempfile);
  465. X      print("Read the manual on what to do on full file systems.\n");
  466. X      cleanup(0);
  467. X  }
  468. X  
  469. X--- 426,447 ----
  470. X      msg[msg_cnt-1].m_lines = lines;
  471. X      }
  472. X  
  473. X      if (isoff(glob_flags, READ_ONLY)) {
  474. X      fclose(tmpf);
  475. X      if (!(tmpf = fopen(tempfile, "r")))
  476. X          error("unable to open %s for reading", tempfile);
  477. X      }
  478. X+     fclose(mail_fp);
  479. X  }
  480. X  
  481. X! void
  482. X! fs_error(mailfile, mail_fp)
  483. X! char *mailfile;
  484. X! FILE *mail_fp;
  485. X  {
  486. X      error("WARNING: unable to write to \"%s\"", tempfile);
  487. X      print("Read the manual on what to do on full file systems.\n");
  488. X+     close_lock(mailfile, mail_fp);
  489. X      cleanup(0);
  490. X  }
  491. X  
  492. X***************
  493. X*** 413,423 ****
  494. X   */
  495. X  copyback()
  496. X  {
  497. X!     register int    new = 0, i, j=0, k=0;
  498. X      register long    flg = 0;
  499. X!     register FILE    *mbox = NULL_FILE, *mail_fp;
  500. X      char        *mbox_file, action = 0;
  501. X!     int         hold = 0, delete_it = 0, dont_unlink = FALSE;
  502. X  
  503. X  #ifdef SUNTOOL
  504. X      if (istool) {
  505. X--- 451,461 ----
  506. X   */
  507. X  copyback()
  508. X  {
  509. X!     register int    new = 0, i=0, j=0, k=0;
  510. X      register long    flg = 0;
  511. X!     register FILE    *mbox = NULL_FILE, *mail_fp = NULL_FILE;
  512. X      char        *mbox_file, action = 0;
  513. X!     int         hold = 0, delete_it = 0, dont_unlink = FALSE, keepsave;
  514. X  
  515. X  #ifdef SUNTOOL
  516. X      if (istool) {
  517. X***************
  518. X*** 467,472 ****
  519. X--- 505,513 ----
  520. X          error("Unable to write to %s", mbox_file);
  521. X      }
  522. X      }
  523. X+ #ifdef DOT_LOCK
  524. X+     if ((i = dot_lock(mailfile)) == 0)
  525. X+ #endif /* DOT_LOCK */
  526. X      /* reopen the mailfile; set umask accordingly */
  527. X      {
  528. X      int omask = umask(077);
  529. X***************
  530. X*** 474,491 ****
  531. X      (void) umask(omask);
  532. X      if (!mail_fp) {
  533. X          error("Unable to rewrite %s", mailfile);
  534. X          return 0;
  535. X      }
  536. X      }
  537. X!     turnon(glob_flags, IGN_SIGS);
  538. X!     print("Updating \"%s\"", mailfile);
  539. X! 
  540. X!     if (lock_file(mailfile, fileno(mail_fp)))
  541. X      error("WARNING: unable to lock %s", mailfile);
  542. X  
  543. X      turnon(flg, UPDATE_STATUS);
  544. X      turnon(flg, NO_IGNORE);
  545. X  
  546. X      for (i = 0; i < msg_cnt; i++)
  547. X      /* check to see if message is marked for deletion or, if read and not
  548. X       * preserved, delete it if autodelete is set. Otherwise, save the
  549. X--- 515,544 ----
  550. X      (void) umask(omask);
  551. X      if (!mail_fp) {
  552. X          error("Unable to rewrite %s", mailfile);
  553. X+         if (mbox)
  554. X+         fclose(mbox);
  555. X          return 0;
  556. X      }
  557. X      }
  558. X!     if (i != 0 || lock_file(mailfile, mail_fp) == -1) {
  559. X! #ifndef DOT_LOCK
  560. X      error("WARNING: unable to lock %s", mailfile);
  561. X+ #endif /* DOT_LOCK */
  562. X+     if (mail_fp)
  563. X+         close_lock(mailfile, mail_fp);
  564. X+     if (mbox)
  565. X+         fclose(mbox);
  566. X+     return 0;
  567. X+     }
  568. X  
  569. X+     print("Updating \"%s\"", mailfile);
  570. X+ 
  571. X      turnon(flg, UPDATE_STATUS);
  572. X      turnon(flg, NO_IGNORE);
  573. X+     turnon(glob_flags, IGN_SIGS);
  574. X  
  575. X+     keepsave = !!do_set(set_options, "keepsave");
  576. X+ 
  577. X      for (i = 0; i < msg_cnt; i++)
  578. X      /* check to see if message is marked for deletion or, if read and not
  579. X       * preserved, delete it if autodelete is set. Otherwise, save the
  580. X***************
  581. X*** 492,498 ****
  582. X       * message in the spool file if hold is set. If all fails, save in mbox.
  583. X       */
  584. X      if (ison(msg[i].m_flags, DELETE)
  585. X!         || isoff(msg[i].m_flags, UNREAD) && isoff(msg[i].m_flags, PRESERVE) 
  586. X          && delete_it) {
  587. X          Debug("%s %d",
  588. X          (action!='d')? "\ndeleting message:" : "", i+1), action = 'd';
  589. X--- 545,553 ----
  590. X       * message in the spool file if hold is set. If all fails, save in mbox.
  591. X       */
  592. X      if (ison(msg[i].m_flags, DELETE)
  593. X!     ||  ison(msg[i].m_flags, SAVED) && !keepsave &&
  594. X!         isoff(msg[i].m_flags, PRESERVE)
  595. X!     ||  isoff(msg[i].m_flags, UNREAD) && isoff(msg[i].m_flags, PRESERVE) 
  596. X          && delete_it) {
  597. X          Debug("%s %d",
  598. X          (action!='d')? "\ndeleting message:" : "", i+1), action = 'd';
  599. X***************
  600. X*** 524,531 ****
  601. X      }
  602. X      Debug("\n%s", mailfile);
  603. X  
  604. X!     close_lock(mail_fp);
  605. X  
  606. X      if (mbox)
  607. X      fclose(mbox);
  608. X      if (j) {
  609. X--- 579,594 ----
  610. X      }
  611. X      Debug("\n%s", mailfile);
  612. X  
  613. X!     close_lock(mailfile, mail_fp);
  614. X  
  615. X+ #ifdef SUNTOOL
  616. X+     if (istool) {
  617. X+     mail_timer.it_value.tv_sec = time_out;
  618. X+     setitimer(ITIMER_REAL, &mail_timer, NULL);
  619. X+     }
  620. X+ #endif /* SUNTOOL */
  621. X+ 
  622. X+     /* some users like to have zero length folders for frequent usage */
  623. X      if (mbox)
  624. X      fclose(mbox);
  625. X      if (j) {
  626. X***************
  627. X*** 534,540 ****
  628. X      if (!strcmp(mailfile, spoolfile) && utime(mailfile, times))
  629. X          error("utime");
  630. X      print_more(": saved %d message%s\n", j, (j==1)? NO_STRING: "s");
  631. X!     } else if (strcmp(mailfile, spoolfile) && !dont_unlink && !new)
  632. X      if (unlink(mailfile))
  633. X          turnon(glob_flags, CONT_PRNT), error(": cannot remove");
  634. X      else
  635. X--- 597,604 ----
  636. X      if (!strcmp(mailfile, spoolfile) && utime(mailfile, times))
  637. X          error("utime");
  638. X      print_more(": saved %d message%s\n", j, (j==1)? NO_STRING: "s");
  639. X!     } else if (strcmp(mailfile, spoolfile) && !dont_unlink && !new &&
  640. X!     !do_set(set_options, "save_empty"))
  641. X      if (unlink(mailfile))
  642. X          turnon(glob_flags, CONT_PRNT), error(": cannot remove");
  643. X      else
  644. X***************
  645. X*** 542,557 ****
  646. X      else
  647. X      print_more(": empty\n");
  648. X      if (k)
  649. X!     print("saved %d message%s in %s\n",k,(k==1)? NO_STRING: "s",mbox_file);
  650. X      if (new && !istool)
  651. X      print("New mail has arrived.\n");
  652. X      turnoff(glob_flags, IGN_SIGS);
  653. X! #ifdef SUNTOOL
  654. X!     if (istool) {
  655. X!     mail_timer.it_value.tv_sec = time_out;
  656. X!     setitimer(ITIMER_REAL, &mail_timer, NULL);
  657. X!     }
  658. X! #endif /* SUNTOOL */
  659. X      return 1;
  660. X  }
  661. X  
  662. X--- 606,617 ----
  663. X      else
  664. X      print_more(": empty\n");
  665. X      if (k)
  666. X!     print("saved %d message%s in %s\n",k,(k==1)? NO_STRING:"s", mbox_file);
  667. X      if (new && !istool)
  668. X      print("New mail has arrived.\n");
  669. X+ 
  670. X      turnoff(glob_flags, IGN_SIGS);
  671. X! 
  672. X      return 1;
  673. X  }
  674. X  
  675. X*** OLD/mush.1    Thu May 12 21:14:45 1988
  676. X--- mush.1    Tue Jun 28 21:38:26 1988
  677. X***************
  678. X*** 167,178 ****
  679. X  a database of electronic mail messages under the
  680. X  .I UNIX
  681. X  environment.
  682. X! There are three user interfaces which allow the user to interact with
  683. X  .I Mush.
  684. X  The default interface is the conventional tty-based line mode
  685. X  similar to command line interpreters such as
  686. X  .I csh
  687. X! as well as other mailers, such as University of California, Berkeley's,
  688. X  .I Mail
  689. X  and Bell Lab's System V
  690. X  .I mailx
  691. X--- 167,178 ----
  692. X  a database of electronic mail messages under the
  693. X  .I UNIX
  694. X  environment.
  695. X! There are three user interfaces that allow the user to interact with
  696. X  .I Mush.
  697. X  The default interface is the conventional tty-based line mode
  698. X  similar to command line interpreters such as
  699. X  .I csh
  700. X! as well as other mailers, such as University of California, Berkeley's
  701. X  .I Mail
  702. X  and Bell Lab's System V
  703. X  .I mailx
  704. X***************
  705. X*** 204,210 ****
  706. X  See the corresponding sections for more information on the user
  707. X  interface desired.
  708. X  Most of this manual deals with commands, variables
  709. X! and actions which are common to all three interfaces although
  710. X  some attention is paid to individual characteristics of each interface.
  711. X  .PP
  712. X  The following command line arguments are understood by
  713. X--- 204,210 ----
  714. X  See the corresponding sections for more information on the user
  715. X  interface desired.
  716. X  Most of this manual deals with commands, variables
  717. X! and actions that are common to all three interfaces although
  718. X  some attention is paid to individual characteristics of each interface.
  719. X  .PP
  720. X  The following command line arguments are understood by
  721. X***************
  722. X*** 215,221 ****
  723. X  .TP
  724. X  \-c cc-list
  725. X  The list of Carbon Copy recipients is set on the command line.
  726. X! If more than one address is specified, the entire list should be encased in
  727. X  quotes.
  728. X  This applies when sending mail only.
  729. X  If you are entering the shell, curses mode, or the tool mode, this option is
  730. X--- 215,221 ----
  731. X  .TP
  732. X  \-c cc-list
  733. X  The list of Carbon Copy recipients is set on the command line.
  734. X! If more than one address is specified, the entire list should be enclosed in
  735. X  quotes.
  736. X  This applies when sending mail only.
  737. X  If you are entering the shell, curses mode, or the tool mode, this option is
  738. X***************
  739. X*** 229,239 ****
  740. X  .TP
  741. X  \-F[!] filename
  742. X  This file is the same type as the initialization file read on startup
  743. X! (see INITIALIZATION) with the exception that commands which manipulate
  744. X  or search messages may be given.  Normally, such commands may not exist
  745. X  in the initialization file since that file is read before the folder
  746. X  is scanned.  This file is read after the folder is scanned, so commands
  747. X! which change folders are allowed.
  748. X  The optional `!' argument prevents the shell from running after the file
  749. X  has been sourced.  Otherwise,
  750. X  .I Mush
  751. X--- 229,239 ----
  752. X  .TP
  753. X  \-F[!] filename
  754. X  This file is the same type as the initialization file read on startup
  755. X! (see INITIALIZATION) with the exception that commands that manipulate
  756. X  or search messages may be given.  Normally, such commands may not exist
  757. X  in the initialization file since that file is read before the folder
  758. X  is scanned.  This file is read after the folder is scanned, so commands
  759. X! that change folders are allowed.
  760. X  The optional `!' argument prevents the shell from running after the file
  761. X  has been sourced.  Otherwise,
  762. X  .I Mush
  763. X***************
  764. X*** 269,275 ****
  765. X  .I Mush
  766. X  commands.
  767. X  See the INITIALIZATION section for information on how to
  768. X! write scripts which deal with mail.
  769. X  Note that this flag is different from the \*Qignore\*U flag of UCB Mail.
  770. X  .TP
  771. X  \-N
  772. X--- 269,275 ----
  773. X  .I Mush
  774. X  commands.
  775. X  See the INITIALIZATION section for information on how to
  776. X! write scripts that deal with mail.
  777. X  Note that this flag is different from the \*Qignore\*U flag of UCB Mail.
  778. X  .TP
  779. X  \-N
  780. X***************
  781. X*** 304,310 ****
  782. X  \-s subject
  783. X  The subject is set on the command line using this flag.
  784. X  If the subject has
  785. X! any spaces or tabs, the entire subject should be encased in quotes.
  786. X  This applies when sending mail only.
  787. X  If you are entering the shell,
  788. X  curses mode, or the tool mode, this option is ignored.
  789. X--- 304,310 ----
  790. X  \-s subject
  791. X  The subject is set on the command line using this flag.
  792. X  If the subject has
  793. X! any spaces or tabs, the entire subject should be enclosed in quotes.
  794. X  This applies when sending mail only.
  795. X  If you are entering the shell,
  796. X  curses mode, or the tool mode, this option is ignored.
  797. X***************
  798. X*** 395,401 ****
  799. X  .I Mush
  800. X  has command line history reminiscent of
  801. X  .IR csh ,
  802. X! commands which use UUCP's `!' character for user-host and host-host
  803. X  separation should be escaped (preceded by a backslash).
  804. X  This is not necessary in the initialization file (.mushrc) because history
  805. X  referencing is ignored while these files are being sourced.
  806. X--- 395,401 ----
  807. X  .I Mush
  808. X  has command line history reminiscent of
  809. X  .IR csh ,
  810. X! commands that use UUCP's `!' character for user-host and host-host
  811. X  separation should be escaped (preceded by a backslash).
  812. X  This is not necessary in the initialization file (.mushrc) because history
  813. X  referencing is ignored while these files are being sourced.
  814. X***************
  815. X*** 415,421 ****
  816. X  .PP
  817. X  .BR "Command Line Aliases" .
  818. X  .PP
  819. X! Command aliases are different than mail aliases in that they are used
  820. X  to expand to commands.
  821. X  The usage of command line aliases is similar to that supplied by
  822. X  .IR csh .
  823. X--- 415,421 ----
  824. X  .PP
  825. X  .BR "Command Line Aliases" .
  826. X  .PP
  827. X! Command aliases are different from mail aliases in that they are used
  828. X  to expand to commands.
  829. X  The usage of command line aliases is similar to that supplied by
  830. X  .IR csh .
  831. X***************
  832. X*** 428,434 ****
  833. X  one command to be used as input to the next command in the pipeline.
  834. X  However, the output of commands is not the \*Qtext\*U that is returned
  835. X  (as it is in
  836. X! .IR csh ),
  837. X  but the messages that are affected.
  838. X  .PP
  839. X  .BR Help .
  840. X--- 428,434 ----
  841. X  one command to be used as input to the next command in the pipeline.
  842. X  However, the output of commands is not the \*Qtext\*U that is returned
  843. X  (as it is in
  844. X! .IR csh )
  845. X  but the messages that are affected.
  846. X  .PP
  847. X  .BR Help .
  848. X***************
  849. X*** 489,495 ****
  850. X  The default system initialization file is read first and then the
  851. X  user's personal initialization file is read.
  852. X  The system default file
  853. X! is set up by the system administrator and may contain commands which
  854. X  should be set system-wide.
  855. X  .PP
  856. X  The user's file is determined by first looking for the environment variable
  857. X--- 489,495 ----
  858. X  The default system initialization file is read first and then the
  859. X  user's personal initialization file is read.
  860. X  The system default file
  861. X! is set up by the system administrator and may contain commands that
  862. X  should be set system-wide.
  863. X  .PP
  864. X  The user's file is determined by first looking for the environment variable
  865. X***************
  866. X*** 497,503 ****
  867. X  If that file isn't found, then the file
  868. X  .I .mushrc
  869. X  is searched for in the home directory of the user.
  870. X! If that file cannot be found, it will attempt to read the file,
  871. X  .I .mailrc
  872. X  from the same directory.
  873. X  Finally, if that file cannot be read, no initialization is done
  874. X--- 497,503 ----
  875. X  If that file isn't found, then the file
  876. X  .I .mushrc
  877. X  is searched for in the home directory of the user.
  878. X! If that file cannot be found, it will attempt to read the file
  879. X  .I .mailrc
  880. X  from the same directory.
  881. X  Finally, if that file cannot be read, no initialization is done
  882. X***************
  883. X*** 550,556 ****
  884. X  It may be anywhere on a line in the file.
  885. X  When that character is encountered,
  886. X  processing of that line is discontinued to the end of the line.
  887. X! If the `#' is encased in quotes (single or double), then it is not
  888. X  considered a comment.
  889. X  Examples:
  890. X  .sp
  891. X--- 550,556 ----
  892. X  It may be anywhere on a line in the file.
  893. X  When that character is encountered,
  894. X  processing of that line is discontinued to the end of the line.
  895. X! If the `#' is enclosed in quotes (single or double), then it is not
  896. X  considered a comment.
  897. X  Examples:
  898. X  .sp
  899. X***************
  900. X*** 580,586 ****
  901. X  The statements associated with an \*Qif\*U expression are never on the same
  902. X  line with the conditional.
  903. X  .PP
  904. X! Conditional expressions understood include the internal variables,
  905. X  .IR istool ,
  906. X  .IR iscurses ,
  907. X  .IR hdrs_only ,
  908. X--- 580,586 ----
  909. X  The statements associated with an \*Qif\*U expression are never on the same
  910. X  line with the conditional.
  911. X  .PP
  912. X! Conditional expressions understood include the internal variables
  913. X  .IR istool ,
  914. X  .IR iscurses ,
  915. X  .IR hdrs_only ,
  916. X***************
  917. X*** 613,619 ****
  918. X  If \-i is specified, the value for
  919. X  .I redirect
  920. X  will be set to false.
  921. X! These are internal variables whose values can not be referenced using the
  922. X  \*Q$variable\*U method of variable expansion.
  923. X  .PP
  924. X  The `!' operator may be used to negate expressions, thus,
  925. X--- 613,619 ----
  926. X  If \-i is specified, the value for
  927. X  .I redirect
  928. X  will be set to false.
  929. X! These are internal variables whose values cannot be referenced using the
  930. X  \*Q$variable\*U method of variable expansion.
  931. X  .PP
  932. X  The `!' operator may be used to negate expressions, thus,
  933. X***************
  934. X*** 666,673 ****
  935. X  Like other interactive commands, the
  936. X  .B curses
  937. X  command itself should never be called from an initialization file.
  938. X! Doing so will cause terminal settings to be set incorrectly and unpredictable
  939. X! results from there.
  940. X  See the CURSES INTERFACE section for configuring your
  941. X  environment so you enter curses mode each time you run the shell.
  942. X  .PP
  943. X--- 666,673 ----
  944. X  Like other interactive commands, the
  945. X  .B curses
  946. X  command itself should never be called from an initialization file.
  947. X! Doing so will cause terminal settings to be set incorrectly and cause
  948. X! unpredictable results from there.
  949. X  See the CURSES INTERFACE section for configuring your
  950. X  environment so you enter curses mode each time you run the shell.
  951. X  .PP
  952. X***************
  953. X*** 698,703 ****
  954. X--- 698,731 ----
  955. X  .I less
  956. X  normally fails to function correctly
  957. X  for the terminal type \*Qadm3a\*U so we don't use it.
  958. X+ .sp
  959. X+ Also supported in \*Qif\*U expressions are the test flags \*Q-e\*U
  960. X+ and \*Q-z\*U.  These flags test to see if a file exists (\*Q-e\*U) or
  961. X+ if it is zero-length (\*Q-z\*U).
  962. X+ .sp
  963. X+ .nf
  964. X+ .in +2
  965. X+ set mbox = ~/Mail/mbox
  966. X+ set newfolder = /usr/spool/mail/$USER
  967. X+ if -z $newfolder
  968. X+ .ti +4
  969. X+ set newfolder = $mbox
  970. X+ endif
  971. X+ if -e $newfolder
  972. X+ .ti +4
  973. X+ folder $newfolder
  974. X+ else
  975. X+ .ti +4
  976. X+ quit
  977. X+ endif
  978. X+ .fi
  979. X+ .sp
  980. X+ This sets a new variable called \fBnewfolder\fR to the the user's spool
  981. X+ mailbox (the system mailbox).  It then tests to see if it is zero length,
  982. X+ and if it is, resets the variable to the value of the user's \fBmbox\fR
  983. X+ variable (mbox must be set here).  It then tests to see if the new folder
  984. X+ exists.  If it does, it changes folders to the new folder.  If it doesn't
  985. X+ exist, the program exits (via \fBquit\fR).
  986. X  .PP
  987. X  After sourcing the initialization file,
  988. X  .I Mush
  989. X***************
  990. X*** 712,718 ****
  991. X  variable set, then when the current folder's messages have all been read,
  992. X  the messages are sorted according to the value of the
  993. X  variable (see the sort entry under the VARIABLES heading for more information).
  994. X! Each message has a number of message header lines which contain information
  995. X  about whom the mail is from, the subject of the message, the date it was
  996. X  received, and other information about the letter.
  997. X  This information is then compiled into a one-line summary for
  998. X--- 740,746 ----
  999. X  variable set, then when the current folder's messages have all been read,
  1000. X  the messages are sorted according to the value of the
  1001. X  variable (see the sort entry under the VARIABLES heading for more information).
  1002. X! Each message has a number of message header lines that contain information
  1003. X  about whom the mail is from, the subject of the message, the date it was
  1004. X  received, and other information about the letter.
  1005. X  This information is then compiled into a one-line summary for
  1006. X***************
  1007. X*** 747,753 ****
  1008. X  the group \*Qunix-wizards\*U (of which the user is an elite
  1009. X  member) and save them in the file $folder/wizmail.
  1010. X  Last, the folder will be updated, removing all deleted mail
  1011. X! (saved mail may be marked as deleted),
  1012. X  and the folder is reread and sorted according to the date of the messages.
  1013. X  .SH "GENERAL USAGE"
  1014. X  Because there are three different interfaces available to the user,
  1015. X--- 775,781 ----
  1016. X  the group \*Qunix-wizards\*U (of which the user is an elite
  1017. X  member) and save them in the file $folder/wizmail.
  1018. X  Last, the folder will be updated, removing all deleted mail
  1019. X! (saved mail may be marked as deleted)
  1020. X  and the folder is reread and sorted according to the date of the messages.
  1021. X  .SH "GENERAL USAGE"
  1022. X  Because there are three different interfaces available to the user,
  1023. X***************
  1024. X*** 754,760 ****
  1025. X  the tty characteristics (backspace, kill-word, kill-line, redraw line)
  1026. X  are simulated identically in all interfaces.
  1027. X  When the user has to type something, the 4.2BSD style of tty driver interface
  1028. X! is simulated whether you're in the window system, the curses mode, the tty-line
  1029. X  mode, and even on System-V machines.
  1030. X  This means that backspacing causes a
  1031. X  backspace-space-backspace effect (erasing the character backspaced over).
  1032. X--- 782,789 ----
  1033. X  the tty characteristics (backspace, kill-word, kill-line, redraw line)
  1034. X  are simulated identically in all interfaces.
  1035. X  When the user has to type something, the 4.2BSD style of tty driver interface
  1036. X! is simulated whether you're in the window system, the curses mode, or
  1037. X! the tty-line
  1038. X  mode, and even on System-V machines.
  1039. X  This means that backspacing causes a
  1040. X  backspace-space-backspace effect (erasing the character backspaced over).
  1041. X***************
  1042. X*** 767,788 ****
  1043. X  If the message is marked as deleted, then use the 
  1044. X  .B undelete
  1045. X  command supplied by the interface you are using.
  1046. X! To display a message in line mode, specify a message to be displayed using
  1047. X  .BR print ,
  1048. X  .BR type ,
  1049. X  .BR p ,
  1050. X  .BR t ,
  1051. X! or by typing the message number, that message will be printed on the screen.
  1052. X  .PP
  1053. X  In curses mode, move the cursor over the message you want and type
  1054. X  a `t' or `p' to read the message.
  1055. X! The user may \*Qbind\*U other keys to call
  1056. X! the function which displays messages if `t' and `p' are uncomfortable.
  1057. X  .PP
  1058. X  In the graphics mode, move the mouse over the message you wish to
  1059. X  be displayed and select the LEFT mouse button.
  1060. X! If the message you want is not visible (in the header subwindow), you may type
  1061. X! in the message subwindow the number of the message and hit return.
  1062. X  That message number will be displayed.
  1063. X  .PP
  1064. X  In the line or curses mode, if the message has more lines than the variable
  1065. X--- 796,817 ----
  1066. X  If the message is marked as deleted, then use the 
  1067. X  .B undelete
  1068. X  command supplied by the interface you are using.
  1069. X! To display a message in line mode, specify the message using
  1070. X  .BR print ,
  1071. X  .BR type ,
  1072. X  .BR p ,
  1073. X  .BR t ,
  1074. X! or type a message number to display that message on the screen.
  1075. X  .PP
  1076. X  In curses mode, move the cursor over the message you want and type
  1077. X  a `t' or `p' to read the message.
  1078. X! You may \*Qbind\*U other keys to call
  1079. X! the function that displays messages if `t' and `p' are uncomfortable.
  1080. X  .PP
  1081. X  In the graphics mode, move the mouse over the message you wish to
  1082. X  be displayed and select the LEFT mouse button.
  1083. X! If the message you want is not visible (in the header subwindow), you may type,
  1084. X! in the message subwindow, the number of the message and hit return.
  1085. X  That message number will be displayed.
  1086. X  .PP
  1087. X  In the line or curses mode, if the message has more lines than the variable
  1088. X***************
  1089. X*** 842,848 ****
  1090. X  For instance, typing \*Q~i\*U (alone on a line) will place a copy
  1091. X  of the \*Qcurrent message\*U into your message body.
  1092. X  It will not include the message headers of the message, just the body of text
  1093. X! which composes the message.
  1094. X  .PP
  1095. X  Available
  1096. X  .BR "tilde escapes" :
  1097. X--- 871,877 ----
  1098. X  For instance, typing \*Q~i\*U (alone on a line) will place a copy
  1099. X  of the \*Qcurrent message\*U into your message body.
  1100. X  It will not include the message headers of the message, just the body of text
  1101. X! that comprises the message.
  1102. X  .PP
  1103. X  Available
  1104. X  .BR "tilde escapes" :
  1105. X***************
  1106. X*** 862,868 ****
  1107. X  Save the contents of the letter to \*Qdead.letter\*U
  1108. X  (unless the `!' is specified) and then clear the message buffer; the user
  1109. X  remains in editing mode.
  1110. X! If the variable,
  1111. X  .B nosave
  1112. X  is set, then `!' need not be specified.
  1113. X  .TP
  1114. X--- 891,897 ----
  1115. X  Save the contents of the letter to \*Qdead.letter\*U
  1116. X  (unless the `!' is specified) and then clear the message buffer; the user
  1117. X  remains in editing mode.
  1118. X! If the variable
  1119. X  .B nosave
  1120. X  is set, then `!' need not be specified.
  1121. X  .TP
  1122. X***************
  1123. X*** 913,923 ****
  1124. X  .TP
  1125. X  ~S[!]
  1126. X  Include [don't include] signature at end of message.
  1127. X! The variables,
  1128. X  .B autosign
  1129. X  and
  1130. X  .B autosign2
  1131. X! describes the file or string to append to the message.
  1132. X  See the VARIABLES section for more information on these variables.
  1133. X  .TP
  1134. X  ~s [subject]
  1135. X--- 942,952 ----
  1136. X  .TP
  1137. X  ~S[!]
  1138. X  Include [don't include] signature at end of message.
  1139. X! The variables
  1140. X  .B autosign
  1141. X  and
  1142. X  .B autosign2
  1143. X! describe the file or string to append to the message.
  1144. X  See the VARIABLES section for more information on these variables.
  1145. X  .TP
  1146. X  ~s [subject]
  1147. X***************
  1148. X*** 974,980 ****
  1149. X  Run the
  1150. X  .I Mush
  1151. X  command specified by \*Qcommand\*U.
  1152. X! You may not run any command which sends mail.
  1153. X  It is inadvisable to change folders at this time
  1154. X  since the current message list may be corrupted, but the action is
  1155. X  allowed nonetheless to provide flexibility for experienced users.
  1156. X--- 1003,1009 ----
  1157. X  Run the
  1158. X  .I Mush
  1159. X  command specified by \*Qcommand\*U.
  1160. X! You may not run any command that sends mail.
  1161. X  It is inadvisable to change folders at this time
  1162. X  since the current message list may be corrupted, but the action is
  1163. X  allowed nonetheless to provide flexibility for experienced users.
  1164. X***************
  1165. X*** 993,999 ****
  1166. X  .SH "LINE-MODE INTERFACE"
  1167. X  In the line-mode, the user is given a prompt to which commands are issued
  1168. X  and arguments are passed to commands.
  1169. X! When the user types at the prompt, each line is parsed and words (or,
  1170. X  arguments) are separated into an array of strings.
  1171. X  This array, also called an
  1172. X  .IR "argument vector" ,
  1173. X--- 1022,1028 ----
  1174. X  .SH "LINE-MODE INTERFACE"
  1175. X  In the line-mode, the user is given a prompt to which commands are issued
  1176. X  and arguments are passed to commands.
  1177. X! When the user types at the prompt, each line is parsed and words (or
  1178. X  arguments) are separated into an array of strings.
  1179. X  This array, also called an
  1180. X  .IR "argument vector" ,
  1181. X***************
  1182. X*** 1036,1042 ****
  1183. X  is used in the same manner as in
  1184. X  .IR csh .
  1185. X  There is a limited implementation of history modification;
  1186. X! supported are the argument selectors which reference
  1187. X  command line arguments and \*Q:p\*U (echo, but don't execute the command).
  1188. X  .sp
  1189. X  Examples:
  1190. X--- 1065,1071 ----
  1191. X  is used in the same manner as in
  1192. X  .IR csh .
  1193. X  There is a limited implementation of history modification;
  1194. X! supported are the argument selectors that reference
  1195. X  command line arguments and \*Q:p\*U (echo, but don't execute the command).
  1196. X  .sp
  1197. X  Examples:
  1198. X***************
  1199. X*** 1104,1110 ****
  1200. X  in a message.
  1201. X  A
  1202. X  .B "message list"
  1203. X! is defined as the set of messages which the user specifies in a command or
  1204. X  the messages a command affects after it is through executing.
  1205. X  When one command is piped to another, the effect is that the second command
  1206. X  will consider only those messages affected by first command.
  1207. X--- 1133,1139 ----
  1208. X  in a message.
  1209. X  A
  1210. X  .B "message list"
  1211. X! is defined as the set of messages that the user specifies in a command or
  1212. X  the messages a command affects after it is through executing.
  1213. X  When one command is piped to another, the effect is that the second command
  1214. X  will consider only those messages affected by first command.
  1215. X***************
  1216. X*** 1129,1135 ****
  1217. X  .ti +2
  1218. X  headers :o | delete
  1219. X  .sp
  1220. X! Delete's all old (already read) mail.
  1221. X  .PP
  1222. X  Because action is taken on mail messages, not files,
  1223. X  metacharacters such as `*' and `?' are not expanded to file names as
  1224. X--- 1158,1164 ----
  1225. X  .ti +2
  1226. X  headers :o | delete
  1227. X  .sp
  1228. X! Deletes all old (already read) mail.
  1229. X  .PP
  1230. X  Because action is taken on mail messages, not files,
  1231. X  metacharacters such as `*' and `?' are not expanded to file names as
  1232. X***************
  1233. X*** 1140,1146 ****
  1234. X  commands take
  1235. X  .I "message lists"
  1236. X  as arguments (a list references one or messages) to take action upon.
  1237. X! To reference message numbers,
  1238. X  .I Mush
  1239. X  understands the following special syntax:
  1240. X  .sp
  1241. X--- 1169,1175 ----
  1242. X  commands take
  1243. X  .I "message lists"
  1244. X  as arguments (a list references one or messages) to take action upon.
  1245. X! When referencing message numbers,
  1246. X  .I Mush
  1247. X  understands the following special syntax:
  1248. X  .sp
  1249. X***************
  1250. X*** 1200,1206 ****
  1251. X  .PP
  1252. X  If
  1253. X  .I unix
  1254. X! it is not set, or if the command could not be found in the user's PATH
  1255. X  environment, a message will be printed indicating that the command was
  1256. X  not found.
  1257. X  .PP
  1258. X--- 1229,1235 ----
  1259. X  .PP
  1260. X  If
  1261. X  .I unix
  1262. X! is not set, or if the command could not be found in the user's PATH
  1263. X  environment, a message will be printed indicating that the command was
  1264. X  not found.
  1265. X  .PP
  1266. X***************
  1267. X*** 1209,1216 ****
  1268. X  commands, piping is disallowed either to or from such commands.
  1269. X  If the user wishes to execute
  1270. X  .I UNIX
  1271. X! commands which are to be piped to one another (or use any sort of redirection),
  1272. X! the command,
  1273. X  .B sh
  1274. X  is provided for such purposes.
  1275. X  Since
  1276. X--- 1238,1245 ----
  1277. X  commands, piping is disallowed either to or from such commands.
  1278. X  If the user wishes to execute
  1279. X  .I UNIX
  1280. X! commands that are to be piped to one another (or use any sort of redirection),
  1281. X! the command
  1282. X  .B sh
  1283. X  is provided for such purposes.
  1284. X  Since
  1285. X***************
  1286. X*** 1256,1262 ****
  1287. X  If you want to enter curses mode even if
  1288. X  you don't have mail, use the \-S option on the command line.
  1289. X  .PP
  1290. X! In curses mode, the user's terminal has it's \*Qecho\*U turned off so commands
  1291. X  that are issued are not echoed on the screen.
  1292. X  Certain commands cause the mode
  1293. X  to return to normal for typing purposes (sending mail, for example).
  1294. X--- 1285,1291 ----
  1295. X  If you want to enter curses mode even if
  1296. X  you don't have mail, use the \-S option on the command line.
  1297. X  .PP
  1298. X! In curses mode, the user's terminal has its \*Qecho\*U turned off so commands
  1299. X  that are issued are not echoed on the screen.
  1300. X  Certain commands cause the mode
  1301. X  to return to normal for typing purposes (sending mail, for example).
  1302. X***************
  1303. X*** 1273,1279 ****
  1304. X  Note that the top line is reserved for \*Qstatus\*U and the bottom line is
  1305. X  for user interaction should it be required.
  1306. X  .PP
  1307. X! The user may now type commands via key sequences which are not echoed
  1308. X  to the screen.
  1309. X  Thus, function keys may be bound to \*Qcommands\*U by using the 
  1310. X  .B bind
  1311. X--- 1302,1308 ----
  1312. X  Note that the top line is reserved for \*Qstatus\*U and the bottom line is
  1313. X  for user interaction should it be required.
  1314. X  .PP
  1315. X! The user may now type commands via key sequences that are not echoed
  1316. X  to the screen.
  1317. X  Thus, function keys may be bound to \*Qcommands\*U by using the 
  1318. X  .B bind
  1319. X***************
  1320. X*** 1334,1340 ****
  1321. X  lines of a message.
  1322. X  Next will print the next message.
  1323. X  If the current message is deleted, the next undeleted message is found.
  1324. X! You might notice this is different than the line mode, which will return
  1325. X  an error message that the current message is marked as deleted.
  1326. X  .TP
  1327. X  +, j, J, RETURN
  1328. X--- 1363,1369 ----
  1329. X  lines of a message.
  1330. X  Next will print the next message.
  1331. X  If the current message is deleted, the next undeleted message is found.
  1332. X! You might notice this is different from the line mode, which will return
  1333. X  an error message that the current message is marked as deleted.
  1334. X  .TP
  1335. X  +, j, J, RETURN
  1336. X***************
  1337. X*** 1367,1373 ****
  1338. X  When the \*Qgoto\*U command
  1339. X  is selected, a prompt at the bottom of the window prompts for a
  1340. X  .BR "message list" .
  1341. X! Anything which describes a message list may be used.
  1342. X  Since
  1343. X  .I Mush
  1344. X  commands return message lists, a legal
  1345. X--- 1396,1402 ----
  1346. X  When the \*Qgoto\*U command
  1347. X  is selected, a prompt at the bottom of the window prompts for a
  1348. X  .BR "message list" .
  1349. X! Anything that describes a message list may be used.
  1350. X  Since
  1351. X  .I Mush
  1352. X  commands return message lists, a legal
  1353. X***************
  1354. X*** 1504,1510 ****
  1355. X  .PP
  1356. X  To specify control characters in ascii format for the bind command, the
  1357. X  sequence \*Q\\Cc\*U is used where `c' is the
  1358. X! character which the control key will translate to and must be in upper case.
  1359. X  The sequence \*Q\\CP\*U would map to control-P.
  1360. X  If the user wishes to indicate the RETURN key, this is specified
  1361. X  with the string \*Q\\n\*U and
  1362. X--- 1533,1539 ----
  1363. X  .PP
  1364. X  To specify control characters in ascii format for the bind command, the
  1365. X  sequence \*Q\\Cc\*U is used where `c' is the
  1366. X! character that the control key will translate to and must be in upper case.
  1367. X  The sequence \*Q\\CP\*U would map to control-P.
  1368. X  If the user wishes to indicate the RETURN key, this is specified
  1369. X  with the string \*Q\\n\*U and
  1370. X***************
  1371. X*** 1513,1521 ****
  1372. X  outputs the three characters: control-A, H, line-feed.
  1373. X  To map this function key to a command, the
  1374. X  user would have to enter the sequence \*Q\\CAH\\n\*U as the key sequence,
  1375. X! then follow up with a valid curses command.
  1376. X! From then on, if the user presses that function key,
  1377. X! then the command mapped to it will be executed.
  1378. X  .PP
  1379. X  The ESCAPE key is signified by the sequence, \*Q\\E\*U.
  1380. X  On a Sun-3 workstation,
  1381. X--- 1542,1550 ----
  1382. X  outputs the three characters: control-A, H, line-feed.
  1383. X  To map this function key to a command, the
  1384. X  user would have to enter the sequence \*Q\\CAH\\n\*U as the key sequence,
  1385. X! then follow up with a valid curses command.  From then on, if the user
  1386. X! presses that function key,
  1387. X! the command mapped to it will be executed.
  1388. X  .PP
  1389. X  The ESCAPE key is signified by the sequence, \*Q\\E\*U.
  1390. X  On a Sun-3 workstation,
  1391. X***************
  1392. X*** 1527,1534 ****
  1393. X  unless bound in line mode, and can never begin with a digit.
  1394. X  .PP
  1395. X  Whenever a command is entered, other than `^L'
  1396. X! .RB ( redraw ),
  1397. X! that causes the screen to scroll or be refreshed in any way,
  1398. X  .I Mush
  1399. X  is left in the
  1400. X  .I continue
  1401. X--- 1556,1563 ----
  1402. X  unless bound in line mode, and can never begin with a digit.
  1403. X  .PP
  1404. X  Whenever a command is entered, other than `^L'
  1405. X! .RB ( redraw )
  1406. X! which causes the screen to scroll or be refreshed in any way,
  1407. X  .I Mush
  1408. X  is left in the
  1409. X  .I continue
  1410. X***************
  1411. X*** 1577,1583 ****
  1412. X  .PP
  1413. X  At the end of each list of menu entries for panel items is an item
  1414. X  labelled \*Qhelp\*U.
  1415. X! When this item is chosen, help with that command
  1416. X  is displayed in the center of the console.
  1417. X  .PP
  1418. X  When composing letters, the interface is the same for the tool mode,
  1419. X--- 1606,1612 ----
  1420. X  .PP
  1421. X  At the end of each list of menu entries for panel items is an item
  1422. X  labelled \*Qhelp\*U.
  1423. X! When this item is chosen, help for that command
  1424. X  is displayed in the center of the console.
  1425. X  .PP
  1426. X  When composing letters, the interface is the same for the tool mode,
  1427. X***************
  1428. X*** 1609,1615 ****
  1429. X  facility allows users to customize
  1430. X  .I Mush
  1431. X  to resemble other mailers.
  1432. X! However, efforts have already been made to include commands which are backwards
  1433. X  compatible with other line-mode mailers.
  1434. X  Users of the graphics tool mode of
  1435. X  .I Mush
  1436. X--- 1638,1644 ----
  1437. X  facility allows users to customize
  1438. X  .I Mush
  1439. X  to resemble other mailers.
  1440. X! However, efforts have already been made to include commands that are backwards
  1441. X  compatible with other line-mode mailers.
  1442. X  Users of the graphics tool mode of
  1443. X  .I Mush
  1444. X***************
  1445. X*** 1656,1672 ****
  1446. X  control the program makes while executing.
  1447. X  The intent of the debug level is for tracking down
  1448. X  bugs with the program at specific locations.
  1449. X! Periodically, the program may segmentation fault and core dump.
  1450. X  When this happens, the user can reenter the program,
  1451. X  set the debugging level and recreate the problem.
  1452. X  .sp
  1453. X  If the user suspects memory allocation problems, a debugging
  1454. X! level of 2 or higher will prevent memory from being freed causing no
  1455. X! overwriting of memory bounds.
  1456. X  .sp
  1457. X  If the user suspects sendmail errors,
  1458. X  a debugging level of 3 or higher will prevent sendmail from starting
  1459. X! and outgoing mail is sent to the standard output instead of actually
  1460. X  being sent.
  1461. X  .TP
  1462. X  .BR delete / undelete
  1463. X--- 1685,1701 ----
  1464. X  control the program makes while executing.
  1465. X  The intent of the debug level is for tracking down
  1466. X  bugs with the program at specific locations.
  1467. X! Occasionally, the program may segmentation fault and core dump.
  1468. X  When this happens, the user can reenter the program,
  1469. X  set the debugging level and recreate the problem.
  1470. X  .sp
  1471. X  If the user suspects memory allocation problems, a debugging
  1472. X! level of 2 or higher will prevent memory from being freed so that
  1473. X! memory bounds won't get overwritten.
  1474. X  .sp
  1475. X  If the user suspects sendmail errors,
  1476. X  a debugging level of 3 or higher will prevent sendmail from starting
  1477. X! and outgoing mail is directed to the standard output instead of actually
  1478. X  being sent.
  1479. X  .TP
  1480. X  .BR delete / undelete
  1481. X***************
  1482. X*** 1688,1694 ****
  1483. X  .TP
  1484. X  .B exit
  1485. X  .RB ( x )
  1486. X! Effects an immediate return to the login shell without
  1487. X  modifying the current folder or system spool directory.
  1488. X  .TP
  1489. X  .B expand
  1490. X--- 1717,1723 ----
  1491. X  .TP
  1492. X  .B exit
  1493. X  .RB ( x )
  1494. X! Returns immediately to the login shell without
  1495. X  modifying the current folder or system spool directory.
  1496. X  .TP
  1497. X  .B expand
  1498. X***************
  1499. X*** 1704,1710 ****
  1500. X  command, but the whole process is automated by using the function key
  1501. X  interface provided by the graphics mode.
  1502. X  By default, the last key in each function key pad displays
  1503. X! the values of all the function keys in that set of function keys.
  1504. X  There are the left, right and top set of keys.
  1505. X  .TP
  1506. X  .BR folder " [\-N] [\-r] [!] [ %[user] | # | & | file ]"
  1507. X--- 1733,1739 ----
  1508. X  command, but the whole process is automated by using the function key
  1509. X  interface provided by the graphics mode.
  1510. X  By default, the last key in each function key pad displays
  1511. X! the values of all the function keys in that set.
  1512. X  There are the left, right and top set of keys.
  1513. X  .TP
  1514. X  .BR folder " [\-N] [\-r] [!] [ %[user] | # | & | file ]"
  1515. X***************
  1516. X*** 1736,1748 ****
  1517. X  .TP
  1518. X  .BR from " [ + | \- ]"
  1519. X  .RB ( f )
  1520. X! With no arguments, from will print the current message's header.
  1521. X  If given a message list, from will print the headers of those
  1522. X! messages which are in the list.
  1523. X  .sp
  1524. X  The special arguments `\-' and `+' can be given to move the
  1525. X! current message pointer to the previous or next message
  1526. X! respectively while also printing that message's header.
  1527. X  If a message list was given in addition to `\-' or `+', then
  1528. X  the current message pointer will be set to the first or last
  1529. X  message, respectively, in the message list given.
  1530. X--- 1765,1779 ----
  1531. X  .TP
  1532. X  .BR from " [ + | \- ]"
  1533. X  .RB ( f )
  1534. X! With no arguments,
  1535. X! .I from
  1536. X! will print the current message's header.
  1537. X  If given a message list, from will print the headers of those
  1538. X! messages that are in the list.
  1539. X  .sp
  1540. X  The special arguments `\-' and `+' can be given to move the
  1541. X! current message pointer to the previous or next message,
  1542. X! respectively, while also printing that message's header.
  1543. X  If a message list was given in addition to `\-' or `+', then
  1544. X  the current message pointer will be set to the first or last
  1545. X  message, respectively, in the message list given.
  1546. X***************
  1547. X*** 1802,1808 ****
  1548. X  The next two positions indicate the message status.
  1549. X  The first
  1550. X  may be one of, \*QN\*U (new and unread), \*QU\*U (old, but still
  1551. X! unread), \*Q*\*U (deleted), \*QO\*U (old and read), \*QP\*U (preserved),
  1552. X  or \*Q \*U (read).
  1553. X  The second position may have an \*Qr\*U if the message
  1554. X  has been replied to.
  1555. X--- 1833,1839 ----
  1556. X  The next two positions indicate the message status.
  1557. X  The first
  1558. X  may be one of, \*QN\*U (new and unread), \*QU\*U (old, but still
  1559. X! unread), \*Q*\*U (deleted), \*QS\*U (saved), \*QP\*U (preserved),
  1560. X  or \*Q \*U (read).
  1561. X  The second position may have an \*Qr\*U if the message
  1562. X  has been replied to.
  1563. X***************
  1564. X*** 1817,1823 ****
  1565. X  .I 278
  1566. X  and the subject of the message is
  1567. X  .IR Test .
  1568. X! The format of the message header exemplified here is described by
  1569. X  the string variable
  1570. X  .BR hdr_format .
  1571. X  The example given above has a hdr_format of
  1572. X--- 1848,1854 ----
  1573. X  .I 278
  1574. X  and the subject of the message is
  1575. X  .IR Test .
  1576. X! The format of the message header shown here is described by
  1577. X  the string variable
  1578. X  .BR hdr_format .
  1579. X  The example given above has a hdr_format of
  1580. X***************
  1581. X*** 1835,1846 ****
  1582. X  .nf
  1583. X  .in +2
  1584. X  .ta 1i
  1585. X! n    new messages
  1586. X! d    deleted messages
  1587. X! u    unread messages
  1588. X! o    old messages
  1589. X! r    replied to messages
  1590. X! a    all messages
  1591. X  .fi
  1592. X  .in -2
  1593. X  .sp
  1594. X--- 1866,1879 ----
  1595. X  .nf
  1596. X  .in +2
  1597. X  .ta 1i
  1598. X! .if t .ta 1.5i
  1599. X! n       new messages
  1600. X! d       deleted messages
  1601. X! u       unread messages
  1602. X! o       old messages
  1603. X! r       replied to messages
  1604. X! s       saved messages
  1605. X! a       all messages
  1606. X  .fi
  1607. X  .in -2
  1608. X  .sp
  1609. X***************
  1610. X*** 1854,1860 ****
  1611. X  The
  1612. X  .B z
  1613. X  command can also be used; `z' alone will print the next
  1614. X! screenful (thus, the `+' is optional),
  1615. X  and \*Qz \-\*U is equivalent to \*Qh \-\*U.
  1616. X  .sp
  1617. X  Headers affects all the messages it displays, so piping may be done
  1618. X--- 1887,1893 ----
  1619. X  The
  1620. X  .B z
  1621. X  command can also be used; `z' alone will print the next
  1622. X! screenful (thus, the `+' is optional)
  1623. X  and \*Qz \-\*U is equivalent to \*Qh \-\*U.
  1624. X  .sp
  1625. X  Headers affects all the messages it displays, so piping may be done
  1626. X***************
  1627. X*** 1961,1967 ****
  1628. X  Mailing to programs is indicated by the pipe `|' character preceding the
  1629. X  program name.
  1630. X  Since the user's path is searched, full pathnames are not required for
  1631. X! programs which lie in the user's PATH environment variable.
  1632. X  Example:
  1633. X  .sp
  1634. X  .ti +2
  1635. X--- 1994,2000 ----
  1636. X  Mailing to programs is indicated by the pipe `|' character preceding the
  1637. X  program name.
  1638. X  Since the user's path is searched, full pathnames are not required for
  1639. X! programs that lie in the user's PATH environment variable.
  1640. X  Example:
  1641. X  .sp
  1642. X  .ti +2
  1643. X***************
  1644. X*** 1993,2003 ****
  1645. X  The included message is indented by
  1646. X  the string \*Q> \*U or by the string described by the variables
  1647. X  .BR indent_str ,
  1648. X! .BR pre_indent-str ,
  1649. X  and
  1650. X  .BR post_indent_str .
  1651. X  See the VARIABLES section for more information on these string values.
  1652. X! If a message list is given after the \-i option, then the message
  1653. X  described by that list are included.
  1654. X  The \-h option is identical to the \-i option except that the headers of
  1655. X  the message are also included.
  1656. X--- 2026,2036 ----
  1657. X  The included message is indented by
  1658. X  the string \*Q> \*U or by the string described by the variables
  1659. X  .BR indent_str ,
  1660. X! .BR pre_indent_str ,
  1661. X  and
  1662. X  .BR post_indent_str .
  1663. X  See the VARIABLES section for more information on these string values.
  1664. X! If a message list is given after the \-i option, then the messages
  1665. X  described by that list are included.
  1666. X  The \-h option is identical to the \-i option except that the headers of
  1667. X  the message are also included.
  1668. X***************
  1669. X*** 2025,2037 ****
  1670. X  The forward option does not allow you to edit the message(s) being forwarded
  1671. X  unless the -e flag is also specified.
  1672. X  The subject of the message (if available) is the same as the \fIcurrent\f
  1673. X! message; it not necessarily the message of the message being forwarded.
  1674. X  The subject of forwarded mail cannot be changed.
  1675. X  However, using the \-e flag
  1676. X  will allow the user to change the subject once in editing mode using the
  1677. X  escape sequence, \*Q~s\*U.
  1678. X  .sp
  1679. X! Forwarded mail that has not been edited by the user will contains special
  1680. X  headers such as
  1681. X  .sp
  1682. X  .ti +2
  1683. X--- 2058,2070 ----
  1684. X  The forward option does not allow you to edit the message(s) being forwarded
  1685. X  unless the -e flag is also specified.
  1686. X  The subject of the message (if available) is the same as the \fIcurrent\f
  1687. X! message; it is not necessarily the subject of the message being forwarded.
  1688. X  The subject of forwarded mail cannot be changed.
  1689. X  However, using the \-e flag
  1690. X  will allow the user to change the subject once in editing mode using the
  1691. X  escape sequence, \*Q~s\*U.
  1692. X  .sp
  1693. X! Forwarded mail that has not been edited by the user will contain special
  1694. X  headers such as
  1695. X  .sp
  1696. X  .ti +2
  1697. X***************
  1698. X*** 2039,2045 ****
  1699. X  .ti +2
  1700. X  Resent-From:
  1701. X  .sp
  1702. X! and perhaps other depending on your mail transport agent.
  1703. X  Sendmail, for example, will add a number of other \*QResent-*\*U headers.
  1704. X  .TP
  1705. X  .BR my_hdr / un_hdr
  1706. X--- 2072,2078 ----
  1707. X  .ti +2
  1708. X  Resent-From:
  1709. X  .sp
  1710. X! and perhaps others, depending on your mail transport agent.
  1711. X  Sendmail, for example, will add a number of other \*QResent-*\*U headers.
  1712. X  .TP
  1713. X  .BR my_hdr / un_hdr
  1714. X***************
  1715. X*** 2090,2103 ****
  1716. X  Options:
  1717. X  .ta 1.5i
  1718. X  .in +2
  1719. X- \-d [+-]date    messages sent on or [+ after] [`\-' before] date.
  1720. X  \-ago <format>    search for messages relative to today's date.
  1721. X  \-f    search for pattern in \*QFrom\*U field only.
  1722. X  \-i    ignore case of letters when searching.
  1723. X  \-r msg_list    search only the listed messages.
  1724. X  \-s    search for pattern in \*QSubject\*U field only.
  1725. X  \-t    search for pattern in \*QTo\*U field only.
  1726. X- \-h header    search for pattern in specified header only.
  1727. X  \-x    select messages not containing the pattern.
  1728. X  .in -2
  1729. X  .fi
  1730. X--- 2123,2136 ----
  1731. X  Options:
  1732. X  .ta 1.5i
  1733. X  .in +2
  1734. X  \-ago <format>    search for messages relative to today's date.
  1735. X+ \-d [+-]date    messages sent on or [+ after] [`\-' before] date.
  1736. X  \-f    search for pattern in \*QFrom\*U field only.
  1737. X+ \-h header    search for pattern in specified header only.
  1738. X  \-i    ignore case of letters when searching.
  1739. X  \-r msg_list    search only the listed messages.
  1740. X  \-s    search for pattern in \*QSubject\*U field only.
  1741. X  \-t    search for pattern in \*QTo\*U field only.
  1742. X  \-x    select messages not containing the pattern.
  1743. X  .in -2
  1744. X  .fi
  1745. X***************
  1746. X*** 2149,2155 ****
  1747. X  required, use the \-d option and specify specific dates.
  1748. X  .sp
  1749. X  Also note that the -ago option allows the \*Qbefore\*U (-) and \*Qafter\*U (+)
  1750. X! arguments.  Thus, you may pick for all messages older than 1 week with:
  1751. X  .sp
  1752. X  .ti +2
  1753. X  pick -ago -1 week
  1754. X--- 2182,2188 ----
  1755. X  required, use the \-d option and specify specific dates.
  1756. X  .sp
  1757. X  Also note that the -ago option allows the \*Qbefore\*U (-) and \*Qafter\*U (+)
  1758. X! arguments.  Thus, you may pick all messages older than 1 week with:
  1759. X  .sp
  1760. X  .ti +2
  1761. X  pick -ago -1 week
  1762. X***************
  1763. X*** 2160,2167 ****
  1764. X  .ti +2
  1765. X  pick \-d 2/5/86 | pick \-d \-2/5/87 | pick \-s "mail stuff" | lpr
  1766. X  .sp
  1767. X! will find all the messages between the dates February 5, 1986 and
  1768. X! February 5, 1987 that contain the subject "mail stuff" and send them
  1769. X  to the printer.
  1770. X  .sp
  1771. X  .ti +2
  1772. X--- 2193,2200 ----
  1773. X  .ti +2
  1774. X  pick \-d 2/5/86 | pick \-d \-2/5/87 | pick \-s "mail stuff" | lpr
  1775. X  .sp
  1776. X! will find all the messages between the dates February 5, 1986, and
  1777. X! February 5, 1987, that contain the subject "mail stuff" and send them
  1778. X  to the printer.
  1779. X  .sp
  1780. X  .ti +2
  1781. X***************
  1782. X*** 2201,2210 ****
  1783. X  .BR type ,
  1784. X  .BR t )
  1785. X  Takes a message list and displays each message on the user's terminal.
  1786. X! If the first letter of the command is a capital letter (`P' or `T'),
  1787. X  then \*Qignored\*U headers are not ignored
  1788. X  .I provided
  1789. X! that the variable,
  1790. X  .B alwaysignore
  1791. X  is not set.
  1792. X  If the variable is set, the ignored headers will be
  1793. X--- 2234,2243 ----
  1794. X  .BR type ,
  1795. X  .BR t )
  1796. X  Takes a message list and displays each message on the user's terminal.
  1797. X! If the first letter of the command is a capital letter (`P' or `T')
  1798. X  then \*Qignored\*U headers are not ignored
  1799. X  .I provided
  1800. X! that the variable
  1801. X  .B alwaysignore
  1802. X  is not set.
  1803. X  If the variable is set, the ignored headers will be
  1804. X***************
  1805. X*** 2227,2233 ****
  1806. X  .IR Mush .
  1807. X  If the variable \*Qhold\*U is set, all messages not marked for deletion are
  1808. X  saved in the spool directory.
  1809. X! Otherwise, messages which have been read are saved to
  1810. X  .I ~/mbox
  1811. X  or to the file described by the string variable
  1812. X  .BR mbox .
  1813. X--- 2260,2266 ----
  1814. X  .IR Mush .
  1815. X  If the variable \*Qhold\*U is set, all messages not marked for deletion are
  1816. X  saved in the spool directory.
  1817. X! Otherwise, messages that have been read are saved to
  1818. X  .I ~/mbox
  1819. X  or to the file described by the string variable
  1820. X  .BR mbox .
  1821. X***************
  1822. X*** 2252,2258 ****
  1823. END_OF_FILE
  1824. if test 57115 -ne `wc -c <'Diffs.6.3.b'`; then
  1825.     echo shar: \"'Diffs.6.3.b'\" unpacked with wrong size!
  1826. fi
  1827. # end of 'Diffs.6.3.b'
  1828. fi
  1829. echo shar: End of shell archive.
  1830. exit 0
  1831.